﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using ObviousCode.UI.Aspect.PluginLibrary.Interfaces;
using ObviousCode.UI.Aspect.PluginLibrary.Exceptions;

namespace ObviousCode.UI.Aspect.PluginLibrary
{
    public class BasicTheme : IUITheme
    {
        #region IUITheme Members

        public virtual Direction Stacking { get { return Direction.Vertical; } }

        public virtual bool BorderOnUnselected { get { return false; } }        
        public virtual bool BorderOnHovered { get { return true; } }
        public virtual bool BorderOnSelected { get { return true; } }
        public virtual bool BorderOnDragged { get { return true; } }

        public virtual bool ShadowOnUnselected { get { return false; } }
        public virtual bool ShadowOnHovered { get { return true; } }
        public virtual bool ShadowOnSelected { get { return true; } }
        public virtual bool ShadowOnDragged { get { return true; } }

        public virtual Color HoverBorderColor { get { return Color.LightBlue; } }
        public virtual Color SelectedBorderColor { get { return Color.Gray; } }
        public virtual Color UnselectedBorderColor { get { throw new ThemeElementNotAvailableException(); } }
        public virtual Color DraggedBorderColor { get { return Color.LightSlateGray; } }

        public virtual Color HoverShadowColor { get { return Color.Gray; } }
        public virtual Color SelectedShadowColor { get { return Color.DarkGray; } }
        public virtual Color UnselectedShadowColor { get { throw new ThemeElementNotAvailableException(); } }
        public virtual Color DraggedShadowColor { get { return Color.SlateGray; } }

        public virtual string Description { get { return "Basic"; } }

        public virtual string Key { get { return "icon-label-basic"; } }

        public virtual SizeF BorderInflate { get { return new SizeF(2f, 4f); } }
        
        public virtual Font LabelFont { get { return new Font("Verdana", 9f); } }

        public virtual bool DrawItemAtOriginalPositionOnDrag { get { return false; } }

        public virtual AspectPluginBorderBehaviour BorderBehaviour { get { return AspectPluginBorderBehaviour.Inflate; } }

        public virtual SizeF SetBorderSize { get { return new SizeF(100f, 66f); } }
        public virtual float BorderWidth { get { return 1f; } }
        public virtual float DraggedBorderWidth { get { return 1f; } }
        public virtual float StackPadding { get { return 5f; } }       

        public virtual TextImageOrder Style { get { return TextImageOrder.ImageFirst; } }
        public virtual bool RoundedBorder { get { return false; } }
        public virtual float CornerRadius { get { return 8f; } }

        public virtual PointF ShadowOffset { get { return new PointF(1f,1f); } }

        public virtual float ShadowWidth { get { return 1f; } }                       
        
        public virtual Pen HoverBorderPen { get { return new Pen(HoverBorderColor, BorderWidth); } }
        public virtual Pen SelectedBorderPen { get { return new Pen(SelectedBorderColor, BorderWidth); } }
        public virtual Pen UnselectedBorderPen { get { return new Pen(UnselectedBorderColor, BorderWidth); } }
        public virtual Pen DraggedBorderPen { get { return new Pen(DraggedBorderColor, BorderWidth); } }

        #endregion
    }
}
